home *** CD-ROM | disk | FTP | other *** search
- /*
-
- *-------------------------------------------*
- SuRRouND.H Include to C, C++
- Writed by Cristian Robert Gallas (SuRRouND)
- Using SASC 6.58
-
- Versao Atual
- -------------------------------------------
- V0.4
-
-
- History:
- -------------------------------------------
- V0.1 - 01.05.99 - First Public release;
- V0.2 - 26.05.99 - Arrumado bug na funcao PosicaoCaracter();
- V0.3 - 24.07.99 - Extendido suporte a variavel de entrada
- ilimitada nas funcoes Copia(), TrimSur();
- V0.4 - 21.09.99 - Arrumado Bug na funcao SubstituiString();
- Extendido suporte a variavel de entrada
- ilimitada na funcao SubstituiCaracter();
-
- $VER: SuRRouND.h 0.4 (21.09.99)
- -------------------------------------------
-
- Excuse me but all comments are in Portugues
- *-------------------------------------------*
-
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <math.h>
- #include <dos.h>
- #include <sys/dir.h>
- #include <clib/dos_protos.h>
- #include <proto/exec.h>
-
- char *Arredondar(char var[256])
- {
- /*
- Esta rotina arredonda numeros.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Numero a arredondar --> 10.57 (CHAR 256)
- Saida : Numero arredondado --> 11 (CHAR 256)
- Arredondar("10.57");
- */
-
- char teste[256];
- float x = 0;
- long int y = 0;
- x = atof(var);
- y = x;
- if((x - y) > 0.5)
- y++;
- sprintf(teste, "%d", y);
- return teste;
- }
-
- char *Corta(char var[256], char delimitador, int numero)
- {
- /*
- Comando para cortar uma variavel apartir de um delimitador e
- por campo, igual ao CUT do UNIX.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- 0 1 2
- Entrada: A linha em questao --> cristian:robert:gallas (CHAR 256)
- o delimitador --> : (CHAR 1)
- e o numero do campo --> 1 (INT)
- Saida : O campo retirado --> robert (CHAR 256)
- Erro : "" (CHAR 256)
- Corta("cristian:robert:gallas", ':' 1);
- */
-
- char teste[256];
- int x, y = 0, z = 0, h = 0;
- for(x = 0; x <= strlen(var); x++)
- {
- teste[y++] = var[x];
- if(var[x] == delimitador || var[x] == '\0' || var[x] == '\n')
- {
-
- if(z++ >= numero) {
- teste[--y] = '\0'; h = 1;
- break; } else {
- teste[0] = '\0'; y = 0; }
- if(var[x] == '\0' || var[x] == '\n')
- break;
- }
- }
- teste[y] = '\0';
- if(h == 0)
- strcpy(teste, "CUTERRO");
- return teste;
- }
-
- char *ArrumaDataHora(char var[256], char caracter)
- {
- /*
- Este comando corrige o formato da data, acrescentando o zero
- nos campos em que forem menor que 2.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Hora Completa --> 1:10:6 (CHAR 256)
- Delimitador --> : (CHAR 1)
- Saida : Hora Arrumada --> 01:10:06 (CHAR 256)
- ArrumaHora("1:10:6", ':');
- */
-
- char teste[256], hor[30], min[30], seg[30];
- strcpy(hor, Corta(var, caracter, 0));
- strcpy(min, Corta(var, caracter, 1));
- strcpy(seg, Corta(var, caracter, 2));
- strcpy(teste, hor);
- if(strlen(hor) < 2)
- sprintf(hor, "0%s", teste);
- strcpy(teste, min);
- if(strlen(min) < 2)
- sprintf(min, "0%s", teste);
- strcpy(teste, seg);
- if(strlen(seg) < 2)
- sprintf(seg, "0%s", teste);
- if(strcmp(seg, "CUTERRO"))
- sprintf(teste, "%s%c%s%c%s", hor, caracter, min, caracter, seg);
- else
- sprintf(teste, "%s%c%s", hor, caracter, min);
-
- return teste;
- }
-
- char *RetiraPontas(char var[256], int numero)
- {
- /*
- Este comando retira as pontas da variavel passada
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Linha a recortar --> Cristian Gallas (CHAR 256)
- Caracteres a recortar --> 1 (INT)
- Saida : A linha recortada --> ristian Galla (CHAR 256)
- RetiraPontas("Cristian Gallas", 1);
- */
-
- char teste[256];
- int x = 0, y = 0;
- if(strlen(var) < 2)
- return "";
- for(x = numero; x < (strlen(var) - numero); x++)
- teste[y++] = var[x];
-
- teste[y] = '\0';
- return teste;
- }
-
- char *HoraSegundo(char var[256])
- {
- /*
- Este comando recebe uma hora e retorna em segundos
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Hora:Minutos:Segundos --> 24:59:59 (CHAR 256)
- Saida : Em Segundos --> 24234 (LONG)
- HoraSegundo("24:59:59");
- */
-
- char teste[256], hora[50], minutos[50], segundos[50];
- long total;
-
- strcpy(hora, Corta(var, ':', 0));
- strcpy(minutos, Corta(var, ':', 1));
- strcpy(segundos, Corta(var, ':', 2));
-
- total = ((atoi(hora) * 3600) + (atoi(minutos) * 60) + atoi(segundos));
- sprintf(teste, "%ld", total);
- return teste;
- }
-
- char *SegundoHora(char var[256])
- {
- /*
- Este comando recebe em segundos e retorna uma hora completa
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Segundos --> 456545 (CHAR 256)
- Saida : Hora Completa --> 24:59:59 (CHAR 256)
- SegundoHora("456545");
- */
-
- char teste[256];
- float total;
- int hor, min, seg;
-
- total = atof(var) / 3600;
- sprintf(teste, "%f", total);
- hor = atoi(Corta(teste, '.', 0));
-
- total = (total - hor) * 60;
- sprintf(teste, "%f", total);
- min = atoi(Corta(teste, '.', 0));
-
- total = (total - min) * 60;
- sprintf(teste, "%f", total);
- seg = atoi(Corta(teste, '.', 0));
-
- sprintf(teste, "%d:%d:%d", hor, min, seg);
- strcpy(teste, ArrumaDataHora(teste, ':'));
- return teste;
- }
-
- char *IntervaloHora(char var1[256], char var2[256])
- {
- /*
- Este comando recebe duas horas "em segundo" e retorna
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Hora 1 "Em segundo" --> 12345 (CHAR 256)
- Hora 2 "Em segundo" --> 54321 (CHAR 256)
- Saida : Diferenca em Segundo --> 41976 (CHAR 256)
- IntervaloHora("12345", "54321");
- */
-
- char teste[256];
- long total;
-
- total = atoi(var1) - atoi(var2);
-
- if (total < 0)
- total = (total * (-1));
-
- sprintf(teste, "%ld", total);
- return teste;
- }
-
- int PosicaoCaracter(char var[256], char caracter, int numero)
- {
- /*
- Este comando procura dentro de uma string um determinado
- CARACTER, e devolve sua posicao no string, sempre sera passado
- a primeira ocorrencia partindo da posicao inicial de 1
-
- Versao : 1.1
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian Robert Gallas (CHAR 256)
- Caracter --> o (CHAR 1)
- Numero --> 2 (INT)
- Obs : O Numero eh o numero de ocorrencias na string.
- No caso de 2 sera pego a posicao do segundo caracter
- encontrado.
- Se o caracter nao for encontrado retorna 0;
- Saida : Posicao --> 11 (INT)
- PosicaoCaracter("Cristian Robert Gallas", 'o', 2);
- */
-
- int x = 0, y = 0;
- for(x = 0; x < strlen(var); x++)
- {
- if(caracter == var[x])
- {
- y++;
- if(y >= numero)
- return ++x;
- }
- }
- return 0;
- }
-
- char *HoraFrase(char var[256])
- {
- /*
- Este comando recebe uma hora e transforma em uma frase
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Hora completa --> 24:59:59 (CHAR 256)
- Saida : Frase --> 24 hours, 59 seconds and 50 minutes (CHAR 256)
- HoraFrase("24:59:59);
- */
-
- char teste[256], hor[5], min[5], seg[5];
-
- strcpy(hor, Corta(var, ':', 0));
- strcpy(min, Corta(var, ':', 1));
- strcpy(seg, Corta(var, ':', 2));
-
- sprintf(teste, "%s hours, %s minutes and %s seconds", hor, min, seg);
- return teste;
- }
-
- char *DiaJuliano(char var[256])
- {
- /*
- Este comando recebe uma data e retorna seu dia juliano
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Dia.Mes.Ano --> 24.05.1997 (CHAR 256)
- Saida : Dia Juliano --> 354555 (CHAR 256)
- DiaJuliano("24.05.1997");
- */
-
- char teste[256];
- float x = 0, ano = 0, Aux = 0;
- int dia = 0, mes = 0;
- dia = atoi(Corta(var, '.', 0));
- mes = atoi(Corta(var, '.', 1));
- ano = atoi(Corta(var, '.', 2));
- Aux = ((ano - 1) / 4) + ((ano - 1) * 365) + dia;
- switch (mes)
- {
- case 2: Aux = Aux + 31; break;
- case 3: Aux = Aux + 59; break;
- case 4: Aux = Aux + 90; break;
- case 5: Aux = Aux + 120; break;
- case 6: Aux = Aux + 151; break;
- case 7: Aux = Aux + 181; break;
- case 8: Aux = Aux + 212; break;
- case 9: Aux = Aux + 243; break;
- case 10: Aux = Aux + 273; break;
- case 11: Aux = Aux + 304; break;
- case 12: Aux = Aux + 334; break;
- }
- x = fmod(ano, 4.0);
- if((x == 0) && (mes > 2))
- Aux++;
- sprintf(teste, "%f", Aux);
- return teste;
- }
-
- char *DiferencaDias(char var1[256], char var2[256])
- {
- /*
- Este comando retorna os dias e a diferenca em segundos dos dias
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Dia.Mes.Ano --> 24.05.1997 (CHAR 256)
- Dia.Mes.Ano --> 24.05.1997 (CHAR 256)
- Saida : Dias Intervalo e Segundos de Intervalo --> 0:0 (CHAR 256)
- DiferencaDias("24.05.1997", "24.05.1997");
- */
-
- char dia1[50], dia2[50], teste[256], dias[20];
- int total;
-
- strcpy(dia1, DiaJuliano(var1));
- strcpy(dia2, DiaJuliano(var2));
-
- total = atoi(dia2) - atoi(dia1);
- sprintf(dias, "%d", total);
- total = total * 86400;
-
- if(total < 0)
- total = 0;
-
- sprintf(teste, "%s:%d", dias, total);
- return teste;
- }
-
- int ContaVezesCampo(char arquivo[256], char var[256], char delimitador, int numero)
- {
- /*
- Este comando retorna o total de vezes que um determinado registro
- eh encontrado no arquivo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome do arquivo --> dh2:tmp/miami.txt (CHAR 256)
- Chave de procura --> Me Encontre (CHAR 256)
- Delimitador de campos --> , (CHAR 1)
- Numero do campo --> 2 (INT)
- Saida : O total de vezes encontrado no arquivo --> 10 (CHAR 256)
- ContaVezesCampo("dh2:tmp/miami.txt", "Me Encontre", ',', 2);
- */
-
- char teste[256], a;
- int x, total;
- FILE *entrada;
-
- if(!(entrada = fopen(arquivo, "r")))
- return -1;
- else
- {
- x = 0; total = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- strcpy(teste, Corta(teste, delimitador, numero));
- if(!(strcmp(var, teste)))
- total++;
-
- teste[0] = '\0';
- x = 0;
- }
- }
- fclose(entrada);
- return total;
- }
- }
-
- int ExisteIssoCampo(char arquivo[256], char var[256], char delimitador, int numero)
- {
- /*
- Este comando verifica se um conteudo de um determinado campo
- existe ou nao, retornando 1 se sim e 0 se nao
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path,Nome do arquivo --> dh2:tmp/miami.txt (CHAR 256)
- Chave de procura --> Me Encontre (CHAR 256)
- Delimitador de campos --> , (CHAR 1)
- Numero do campo --> 2 (INT)
- Saida : Retorna 1 se existe e 0 se nao existe --> 0 (INT)
- ExisteIssoCampo("dh2:tmp/miami.txt", "Me Encontre", ',', 2);
- */
-
- char teste[256], a;
- int x, sim;
- FILE *entrada;
-
- if(!(entrada = fopen(arquivo, "r")))
- return 9;
- else
- {
- x = 0; sim = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- strcpy(teste, Corta(teste, delimitador, numero));
- if(!(strcmp(var, teste)))
- {
- sim = 1;
- break;
- }
- teste[0] = '\0';
- x = 0;
- }
- }
- fclose(entrada);
- return sim;
- }
- }
-
- char *Copia(char *var, long int inicio, long int fim)
- {
- /*
- Este comando copia uma determinada palavra, passando como
- parametro caractere inicial e final para copia
-
- Entrada : Palavra --> Cristian Robert Gallas (CHAR*)
- Caracter inicial --> 2 (INT)
- Caracter Final --> 11 (INT)
- Saida : A palavra cortada --> ristian Ro (CHAR*)
- copia("Cristian Robert Gallas", 2, 11);
- */
-
- char *teste;
- long int x = 0, y = 0;
-
- teste = malloc(strlen(var) + 1);
- teste[0] = '\0';
-
- if(inicio < 1)
- inicio = 1;
- if(fim == -1)
- fim = (strlen(var) + 1);
-
- inicio--;
-
- for(x = inicio; x < fim; x++)
- {
- if(x <= strlen(var))
- teste[y++] = var[x];
- }
-
- teste[y] = '\0';
- return teste;
- }
-
- int LinhasArquivo(char var[256])
- {
- /*
- Este comando conta o numero de linhas de um arquivo
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:tmp/gallas.html (CHAR 256)
- Saida : Numero de linhas --> 234 (INT)
- Erro : -1 (INT)
- LinhasArquivo("dh2:tmp/gallas.html");
- */
-
- char a;
- int total = 0;
- FILE *entrada;
- if(!(entrada = fopen(var, "r")))
- return -1;
- else
- {
- while(a = getc(entrada), ! feof(entrada))
- if(a == '\n')
- total++;
-
- fclose(entrada);
- return total;
- }
- }
-
- char *LinhaNumero(char var[256], int numero)
- {
- /*
- Este comando pega de um arquivo uma linha determinada linha.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:tmp/gallas.html (CHAR 256)
- Linha a pegar --> 10 (INT)
- Saida : A linha 10 do arq --> SuRRouND RuLeZ! (CHAR 256)
- Erro : ERRO (CHAR 256)
- LinhaNumero("dh2:tmp/gallas.html", 10);
- */
-
- char teste[256], a;
- int x, y;
- FILE *entrada;
-
- if(!(entrada = fopen(var, "r")))
- return "ERRO";
-
- x = 0; y = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- y++;
- if(y == numero) {
- teste[--x] = '\0';
- break;
- } else {
- x = 0;
- teste[0] = '\0'; }
- }
- }
- teste[x] = '\0';
- fclose(entrada);
- return teste;
- }
-
- int ExisteArquivo(char var[256])
- {
- /*
- Rotina que testa se um arquivo existe.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:tmp/gallas.txt (CHAR 256)
- Saida : True (-1) se existir e False (0) se nao existir (INT)
- if(ExisteArquivo("dh2:tmp/gallas.txt"))
- */
-
- FILE *entrada;
- if(!(entrada = fopen(var, "r"))) {
- fclose(entrada);
- return 0;
- } else {
- fclose(entrada);
- return -1; }
- }
-
- char *SubstituiCaracter(char *var, char caracter1, char caracter2)
- {
- /*
- Este comando substitui em uma determinada string um caracter
- por outro definido na funcao.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian Gallas (CHAR)
- Caracter a procurar --> i (CHAR 1)
- Substituir por --> X (CHAR 1)
- Saida : String substituida --> CrXstXan Gallas (CHAR)
- SubstituiCaracter("Cristian Gallas", 'i', 'X');
- */
-
- char *teste;
- int x = 0, y = 0;
-
- teste = malloc(strlen(var));
- for(x = 0; x < strlen(var); x++)
- if(var[x] == caracter1)
- teste[y++] = caracter2;
- else
- teste[y++] = var[x];
- teste[y] = '\0';
- return teste;
- }
-
- char *MediaCampo(char var[256], char delimitador, int numero)
- {
- /*
- Este comando faz a media de um determinado campo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:gallas.txt (CHAR 256)
- Delimitador Campo --> : (CHAR 1)
- Coluna do Campo --> 0 (INT)
- Saida : Total do Campo --> 5465655 (CHAR 256)
- Media do Campo --> 2323 (CHAR 256)
- Obs : O separador da saida eh : ex: 5465655:2323
- Erro : ERRO (CHAR 256)
- MediaCampo("dh2:gallas.txt", ':', 0);
- */
-
- char teste[256], a;
- float totallinhas = 0, total = 0;
- int x = 0;
- FILE *entrada;
- if(!(entrada = fopen(var, "r")))
- return "ERRO";
- totallinhas = LinhasArquivo(var);
- x = 0; total = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- total = total + atof(Corta(teste, delimitador, numero));
- teste[0] = '\0';
- x = 0;
- }
- }
- fclose(entrada);
- sprintf(teste, "%f:%f", total, (total / totallinhas));
- return teste;
- }
-
- char *AposCaracter(char var[256], char caracter, int numero)
- {
- /*
- Este comando separa uma string apartir de um caracter especifico
- e ainda aceita um numero que serve de pulo apos o caracter espec.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian Robert Gallas (CHAR 256)
- Caracter --> t (CHAR 1)
- Numero --> 1 (INT)
- Saida : A String apos o caracter --> ian Robert Gallas (CHAR 256)
- Obs : Se o Numero fosse 2 --> an Robert Gallas (CHAR 256)
- Se o Numero fosse 3 --> n Robert Gallas (CHAR 256)
- AposCaracter("Cristian Robert Gallas", 't', 1);
- */
-
- char teste[256];
- int x = 0, y = 0, h = 0;
- if(numero >= strlen(var))
- numero = 0;
- for(x = 0; x < strlen(var); x++)
- {
- if((y == 0) && (var[x] == caracter))
- {
- x = x + numero;
- y = 1;
- }
- if(y == 1)
- teste[h++] = var[x];
- }
- teste[h] = '\0';
- return teste;
- }
-
- int DiferencaMes(char var1[30], char var2[30])
- {
- /*
- Este comando pega a diferenca de meses entre duas datas
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Data Um --> 01.02.1997 (CHAR 30)
- Data Dois --> 01.10.1997 (CHAR 30)
- Saida : Numero de Meses --> 8 (INT)
- DiferencaMes("01.02.1997", "01.10.1997");
- */
-
- int difmes, mes1, mes2, ano1, ano2;
- mes1 = atoi(Corta(var1, '.', 1));
- ano1 = atoi(Corta(var1, '.', 2));
- mes2 = atoi(Corta(var2, '.', 1));
- ano2 = atoi(Corta(var2, '.', 2));
- if (ano1 == ano2)
- difmes = mes1 - mes2;
- else
- difmes = (mes1 - mes2) + ((ano1 - ano2) * 12);
- if(difmes < 0)
- difmes = difmes * (-1);
- return difmes;
- }
-
- char *DeletaCaracter(char var[256], char caracter)
- {
- /*
- Este comando retira de uma string um determinado CARACTER,
- retorna o string filtrado e o numero de caracter`s deletados.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian Robert Gallas
- Caracter --> i
- Saida : String Filtrada --> Crstan Robert Gallas
- Numero de Caracteres Deletados --> 2
- DeletaCaracter("Cristian Robert Gallas", 'i');
- */
-
- char teste[256];
- int x = 0, y = 0, total = 0;
- for(x = 0; x < strlen(var); x++)
- if(var[x] != caracter)
- teste[y++] = var[x];
- else
- total++;
- teste[y] = '\0';
- sprintf(teste, "%s:%d", teste, total);
- return teste;
- }
-
- char *Copia2(char var[256], int inicio, int fim)
- {
- /*
- Este comando copia uma determinada palavra, passando como
- parametro o numero do caractere inicial e o numero do caracter
- que se vai andar apos o inicial.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Palavra --> Cristian Robert Gallas (CHAR 256)
- Caracter inicial --> 2 (INT)
- Caracter Final --> 6 (INT)
- Saida : A palavra cortada --> ristia (CHAR 256)
- Copia2("Cristian Robert Gallas", 2, 6);
- */
-
- char teste[256];
- int x = 0, y = 0;
- if(fim > 256)
- fim = 256;
- if(inicio < 1)
- inicio = 1;
- inicio--;
- for(x = inicio; x < (inicio + fim); x++)
- if(x <= strlen(var))
- teste[y++] = var[x];
- teste[y] = '\0';
- return teste;
- }
-
- char *Esquerda(char var[256], int numero)
- {
- /*
- Este comando recorta uma String da esquerda para direita
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian (CHAR 256)
- Numero de Caracteres --> 6 (INT)
- Saida : String cortada --> Cristi (CHAR 256)
- Esquerda("Cristian", 6);
- */
-
- char teste[256];
- int x = 0, y = 0;
- if (numero > strlen(var))
- numero = strlen(var);
- for(x = 0; x < numero; x++)
- teste[y++] = var[x];
-
- teste[y] = '\0';
- return teste;
- }
-
- char *Direita(char var[256], int numero)
- {
- /*
- Este comando recorta uma String da direita para a esquerda
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian (CHAR 256)
- Numero de Caracteres --> 6 (INT)
- Saida : String cortada --> istian (CHAR 256)
- Direita("Cristian", 6);
- */
-
- char teste[256];
- int x = 0, y = 0;
- if (numero > strlen(var))
- numero = strlen(var);
- for(x = (strlen(var) - numero); x < strlen(var); x++)
- teste[y++] = var[x];
-
- teste[y] = '\0';
- return teste;
- }
-
- char *PrimeiroUltimoCampo(char var[256], char caracter, int numero, char caracter2)
- {
- /*
- Este comando retira de um arquivo o primeiro e o ultimo campo
- de uma determinada coluna.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:gallas.txt (CHAR 256)
- Delimitador Campo --> : (CHAR 1)
- Numero do Campo --> 2 (INT)
- Delimitador de Saida --> @ (CHAR 1)
- Saida : Campo da primeira Linha --> Gallas
- Campo da ultima Linha --> Robert
- Obs : O formato da SAIDA eh --> Gallas:Robert (CHAR 256)
- Erro : ERRO (CHAR 256)
- PrimeiroUltimoCampo("dh2:gallas.txt", ':', 2, '@');
- */
-
- char teste[256], a, campo1[256], campo2[256];
- int x, y;
- FILE *entrada;
- if(!(entrada = fopen(var, "r"))) {
- fclose(entrada);
- return "ERRO"; }
- x = 0; y = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- y++;
- teste[x] = '\0';
- if(y == 1)
- strcpy(campo1, Corta(teste, caracter, numero));
- if(feof(entrada))
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- strcpy(campo2, Corta(teste, caracter, numero));
- sprintf(teste, "%s%c%s", campo1, caracter2, campo2);
- return teste;
- }
-
- int QtdCaracter(char var[256], char caracter)
- {
- /*
- Este comando retorna o numero de caracters encontrados em uma
- determinada String.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian Robert Gallas (CHAR 256)
- Caracter a contar --> a (CHAR 1)
- Saida : Numero de vezes --> 3 (INT)
- QtdCaracter("Cristian Robert Gallas", 'a');
- */
-
- int x = 0, total = 0;
- for(x = 0; x < strlen(var); x++)
- if(caracter == var[x])
- total++;
- return total;
- }
-
- int FiltraCampoParaArquivo(char var[256], char arq1[256], char arq2[256], char caracter, int numero, char caracter2)
- {
- /*
- Este comando filtra um determinado campo de um arquivo, e grava
- outro arquivo com o conteudo igual ao argumento passado.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String a comparar --> 01.02.1997 (CHAR 256)
- Arquivo de Entrada --> dh1:gallas.txt (CHAR 256)
- Arquivo de Saida --> dh1:filtro.txt (CHAR 256)
- Delimitador do Arquivo Entrada --> , (CHAR 1)
- Numero do Campo --> 1 (INT)
- Delimitador da String --> . (CHAR 1)
- Saida : Eh gerado o arquivo de saida com o conteudo da linha toda
- Erro : -1 (INT) Caso de problema de abrir arquivo entrada, saida
- Obs : Este comando foi feito para filtrar datas que seguem o
- formato [XX.XX.XX] [01.02.1997], deve ser passado o deli-
- mitador da data, nesse caso eh ., pode ser comparado ate
- 3 campos, ex: [ANO], [MES.ANO], [DIA.MES.ANO]. So 3 campos.
- FiltraCampoParaArquivo("01.02.1997", "dh1:gallas.txt",
- "dh1:filtro.txt", ',', 1, '.');
- */
-
- char teste[256], a, mes[20];
- int x, opcao;
- FILE *entrada, *saida;
- if(!(entrada = fopen(arq1, "r")))
- return -1;
- if(!(saida = fopen(arq2, "w")))
- return -1;
- opcao = QtdCaracter(var, caracter2);
- x = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- if(opcao == 0)
- strcpy(mes, AposCaracter(AposCaracter(Corta(teste, caracter, numero), caracter2, 1), caracter2, 1));
- if(opcao == 1)
- strcpy(mes, AposCaracter(Corta(teste, caracter, numero), caracter2, 1));
- if(opcao == 2)
- strcpy(mes, Corta(teste, caracter, numero));
- if(!(strcmp(var, mes)))
- fprintf(saida, "%s\n", teste);
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- fclose(saida);
- return 0;
- }
-
- char *MaiorMenorCampo(char arq[256], char caracter, int numero, int opcao)
- {
- /*
- Este comando abre um determinado arquivo rastreando um
- determinado campo e traz somente o maior ou o menor campo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome do Arquivo --> dh2:gallas.txt (CHAR 256)
- Delimitador Campo --> , (CHAR 1)
- Numero do Campo --> 1 (INT)
- * Tipo de opcao --> 0 (MENOR) e 1 (MAIOR) (INT)
- Saida : Campo Maior ou Menor --> 34,56,99,10 (CHAR 256)
- Erro : ERRO (CHAR 256) Caso o arquivo de entrada nao exista
- MaiorMenorCampo("dh2:gallas.txt", ',', 1, 0);
- MaiorMenorCampo("dh2:gallas.txt", ',', 1, 1);
- */
-
- char teste[256], a, saida[256];
- int x, total, conta;
- FILE *entrada;
- if(!(entrada = fopen(arq, "r")))
- return "ERRO";
- if(opcao < 0 && opcao > 1)
- opcao = 0;
- x = 0; total = 0; conta = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- ++conta;
- if(conta == 1)
- {
- total = atoi(Corta(teste, caracter, numero));
- strcpy(saida, teste);
- }
- if(opcao == 0)
- {
- if(atoi(Corta(teste, caracter, numero)) < total)
- {
- strcpy(saida, teste);
- total = atoi(Corta(teste, caracter, numero));
- }
- } else {
- if(atoi(Corta(teste, caracter, numero)) > total)
- {
- strcpy(saida, teste);
- total = atoi(Corta(teste, caracter, numero));
- }
- }
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- if(!(strcmp(saida, "")))
- strcpy(saida, LinhaNumero(arq, 1));
- return saida;
- }
-
- char *DataHora(int tipo)
- {
- /*
- Este comando pega o dia ou hora do sistema Operacional.
-
- Versao : 1.0
- Compila : AmigaDos
- Entrada : Tipo de Campo --> 0 (INT)
- Obs : Tipos [0] [DD.MM.AAAA]
- [1] [MM.AAAA]
- [2] [MM.DD.AAAA]
- [3] [AAAA.DD.MM]
- [4] [AAAA.MM.DD]
- [5] [HH:MM:SS]
- [6] [HH:MM]
- [7] [HHMMSS]
- Saida : A data Formatada --> 30.12.1997 (CHAR 20)
- DataHora(0);
- Ou Hora Formatada --> 24:10:05 (CHAR 20)
- DataHora(4);
- */
-
- char teste[256];
- unsigned char clock[8];
- getclk(clock);
- switch (tipo)
- {
- case 0: sprintf(teste, "%d.%d.%d", clock[3], clock[2], (1980 + clock[1])); return ArrumaDataHora(teste, '.');
- case 1: sprintf(teste, "%d.%d", clock[2], (1980 + clock[1])); return ArrumaDataHora(teste, '.');
- case 2: sprintf(teste, "%d.%d.%d", clock[2], clock[3], (1980 + clock[1])); return ArrumaDataHora(teste, '.');
- case 3: sprintf(teste, "%d.%d.%d", (1980 + clock[1]), clock[3], clock[2]); return ArrumaDataHora(teste, '.');
- case 4: sprintf(teste, "%d.%d.%d", (1980 + clock[1]), clock[2], clock[3]); return ArrumaDataHora(teste, '.');
- case 5: sprintf(teste, "%d:%d:%d", clock[4], clock[5], clock[6]); return ArrumaDataHora(teste, ':');
- case 6: sprintf(teste, "%d:%d", clock[4], clock[5]); return ArrumaDataHora(teste, ':');
- case 7: sprintf(teste, "%d%d%d", clock[4], clock[5], clock[6]); return teste;
- }
- return "ERRO";
- }
-
- char *DescricaoMes(int mes, int opcao)
- {
- /*
- Este comando fornece o mes em formato extenso, se passa o
- numero do mes e a opcao e sera retornado o nome do mes.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Numero do mes --> 2 (INT)
- Opcao a listar --> 0 (INT)
- Obs : Opcao 0 retorna em Portugues e 1 em Ingles.
- Saida : Fevereiro (CHAR RETURN)
- Erro : ERRO (CHAR RETURN) Mes invalido! < 0 e > 12
- Obs : Caso seja necessario abrevidado use:
- Esquerda(DescricaoMes(2, 0), 3);
- */
-
- switch (mes)
- {
- case 1: if(opcao == 0) return "Janeiro"; else return "January";
- case 2: if(opcao == 0) return "Fevereiro"; else return "February";
- case 3: if(opcao == 0) return "Marco"; else return "March";
- case 4: if(opcao == 0) return "Abril"; else return "April";
- case 5: if(opcao == 0) return "Maio"; else return "May";
- case 6: if(opcao == 0) return "Junho"; else return "June";
- case 7: if(opcao == 0) return "Julho"; else return "July";
- case 8: if(opcao == 0) return "Agosto"; else return "August";
- case 9: if(opcao == 0) return "Setembro"; else return "September";
- case 10: if(opcao == 0) return "Outubro"; else return "October";
- case 11: if(opcao == 0) return "Novembro"; else return "November";
- case 12: if(opcao == 0) return "Dezembro"; else return "December";
- }
- return "ERRO";
- }
-
- int CopiaArquivo(char var1[256], char var2[256])
- {
- /*
- Este comando copia um determinado arquivo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome arquivo origem --> dh2:gallas.txt (CHAR 256)
- Path+Nome arquivo destino --> dh2:gallas.tmp (CHAR 256)
- Saida : -1 Erro abertura na origem ou criacao destino, 0 OK (INT)
- CopiaArquivo("dh2:gallas.txt", "dh2:gallas.tmp");
- */
-
- char a;
- FILE *entrada, *saida;
- if(!(entrada = fopen(var1, "r")))
- return -1;
- if(!(saida = fopen(var2, "w")))
- return -1;
- while(a = getc(entrada), ! feof(entrada))
- fputc(a, saida);
- fclose(entrada);
- fclose(saida);
- return 0;
- }
-
- int MoveArquivo(char var1[256], char var2[256])
- {
- /*
- Este comando move um determinado arquivo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome arquivo origem --> dh2:gallas.txt (CHAR 256)
- Path+Nome arquivo destino --> dh2:gallas.tmp (CHAR 256)
- Saida : -1 Erro abertura na origem ou criacao destino, 0 OK (INT)
- MoveArquivo("dh2:gallas.txt", "dh2:gallas.tmp");
- */
-
- char a;
- FILE *entrada, *saida;
- if(!(entrada = fopen(var1, "r")))
- return -1;
- if(!(saida = fopen(var2, "w")))
- return -1;
- while(a = getc(entrada), ! feof(entrada))
- fputc(a, saida);
- fclose(entrada);
- fclose(saida);
- remove(var1);
- return 0;
- }
-
- int GravaRegistroDB(char arq[256], char var[256], char campo[256], char caracter[10])
- {
- /*
- Este comando grava ou adiciona um registro em um arquivo texto,
- tipo DB!
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:sur.db (CHAR 256)
- Linha a Gravar --> Cristian Gallas (CHAR 256)
- Campo do registro --> Nome (CHAR 256)
- Tipo de Gravacao --> a (CHAR 10)
- Obs : a --> Append, w --> Write (CASE SENSITIVE)
- Saida : 0 se o arq a gravar nao tiver permissao, -1 OK (INT)
- Obs : Nao deve ser gravado 2 registros com o mesmo campo.
- GravaRegistroDB("dh2:sur.db", "Cristian Gallas", "Nome", "a");
- */
-
- FILE *saida;
- if(!(saida = fopen(arq, caracter)))
- return 0;
- fprintf(saida, "**>%s:%s\n", campo, var);
- fclose(saida);
- return -1;
- }
-
- int TotalRegistroDB(char arq[256], char campo[256])
- {
- /*
- Este comando verifica o total de campos iguais do arquivo, Tambem
- usado para verificar se um determinado campo existe no arquivo,
- so testar se o retorno eh maior que 0.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> tmp:gallas.txt (CHAR 256)
- Campo do Registro --> path (CHAR 256)
- Saida : Numero de Chaves iguais --> 1 (INT)
- Erro : -1 Caso o arquivo de entrada nao exista, 0 Ok. (INT)
- TotalRegistroDB("tmp:gallas.txt", "path");
- */
-
- char teste[256], a;
- int x, total;
- FILE *entrada;
- if(!(entrada = fopen(arq, "r")))
- return -1;
- x = 0; total = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- if(!(strcmp(Copia(Corta(teste, ':', 0), 4, 15), campo)))
- total++;
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- return total;
- }
-
- int DeletaRegistroDB(char arq[256], char campo[256], char tmp[256])
- {
- /*
- Este comando deleta um determinado campo do arquivo DB, caso
- exista mais de um campo igual, todos serao deletados.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entradas : Path+Nome Arquivo --> dh2:gallas.txt (CHAR 256)
- Campo a deletar --> path (CHAR 256)
- Arquivo temporario --> ram:surround.tmp (CHAR 256)
- Saida : O total de campos deletados --> 1 (INT)
- Erro : -1 caso de problema na abertura do arquivo DB ou
- problema ao criar o arquivo temporario. > 0 Ok.
- Obs : Caso o arquivo temporario seja pequeno, e nao muito
- variavel, jogue ele na RAM: assim sera bem mais rapido.
- DeletaRegistroDB("dh2:gallas.txt", "path", "ram:surround.tmp");
- */
-
- char teste[256], a;
- int x, total;
- FILE *entrada, *saida;
- if(!(entrada = fopen(arq, "r")))
- return -1;
- if(!(saida = fopen(tmp, "w")))
- return -1;
- x = 0; total = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- if(!(strcmp(Copia(Corta(teste, ':', 0), 4, 15), campo)))
- total++;
- else
- fprintf(saida, "%s\n", teste);
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(saida);
- fclose(entrada);
- CopiaArquivo(tmp, arq);
- remove(tmp);
- return total;
- }
-
- char *LeRegistroDB(char arq[256], char campo[256])
- {
- /*
- Este comando le um determinado registro pela seu campo. Se o campo
- nao existir no arquivo o retorno sera nulo "". Se existir mais
- de um campo igual, sera retornado a primeiro.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:gallas.db (CHAR 256)
- Campo a ler --> path (CHAR 256)
- Saida : A linha da Chave 2 --> Campo da Chave 2 (CHAR 256)
- LeRegistroDB("dh2:gallas.db", "path");
- */
-
- char teste[256], a;
- int x;
- FILE *entrada;
- if(!(entrada = fopen(arq, "r")))
- return "";
- x = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- if(!(strcmp(Corta(Corta(teste, ':', 0), '>', 1), campo))) {
- fclose(entrada);
- return AposCaracter(teste, ':', 1); }
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- return "";
- }
-
- char *StringAscii(char key[256], int numero)
- {
- /*
- Este comando recebe uma determinada String e retorna ela em
- codigos da tabela ASCII. Podendo ainda somar cada caracter ascii
- com um determinado numero.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String a converter --> Gallas (CHAR 256)
- Numero a somar --> 2
- Saida : String em ASCII --> 073099110110099117 (CHAR 256)
- Obs : O Numero chave a ser passado nao deve exceder a 740,
- caso isso aconteca sera calculado como 1. Esta rotina
- foi feita para ajudar na criptografia de dados.
- StringAscii("Gallas", 2);
- */
-
- char cha[5], chat[5], chave[256];
- int x = 0;
- if(numero > 740)
- numero = 1;
- chave[0] = '\0';
- for(x = 0; x < strlen(key); x++)
- {
- sprintf(chat, "%u", key[x]);
- sprintf(cha, "%d", atoi(chat) + numero);
- if(strlen(cha) == 1)
- sprintf(chave, "%s00%s", chave, cha);
- if(strlen(cha) == 2)
- sprintf(chave, "%s0%s", chave, cha);
- if(strlen(cha) == 3)
- sprintf(chave, "%s%s", chave, cha);
- }
- return chave;
- }
-
- char *AsciiString(char key[256], int numero)
- {
- /*
- Este comando recebe a string convertida para ascii e retorna
- ela para a sua string de origem baseado no numero chave que deve
- ser o mesmo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Ascii a retornar --> 073099110110099117 (CHAR 256)
- Numero a chave --> 2
- Saida : String de retorno --> Gallas (CHAR 256)
- AsciiString("073099110110099117", 2);
- */
-
- char chave[256], saida[256], teste[256];
- int x = 0, contador = 0, y = 0;
-
- teste[0] = '\0';
- for(x = 0; x < strlen(key); x++)
- {
- chave[y++] = key[x]; contador++;
- if(contador == 3)
- {
- chave[y] = '\0';
- sprintf(saida, "%s%c", teste, (atoi(chave) - numero));
- strcpy(teste, saida);
- chave[0] = '\0'; y = 0; contador = 0;
- }
- }
- return saida;
- }
-
- char *CriptografiaSimples(char var[256], int opcao)
- {
- /*
- Este comando criptografa e descriptografa uma determinada String.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian (CHAR 256)
- Opcao --> 0 (INT)
- Obs : 0 Criptografa, 1 Descriptografa
- Saida : String Alterada --> 2$#5%5mO (CHAR 256)
- CriptografiaSimples("Cristian", 0);
- */
-
- char teste[256], tabela1[256], tabela2[256];
- int x, posicao;
- if(opcao < 0 && opcao > 1)
- opcao = 0;
- strcpy(tabela1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890~`!@#$%^&*()-_+=|\\{}[]:;'<>,./?\" öóòôõáà âãúùûéèêëÃìîï®ç");
- strcpy(tabela2, " ~`!@#$%^&*()-_+=|\\{}[]:;'<>,./?\"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzòôõáà âãúùûéèêëÃìîïöóç®");
- teste[0] = '\0';
- posicao = 0;
- for(x = 0; x < strlen(var); x++)
- {
- if(opcao == 0) {
- posicao = PosicaoCaracter(tabela1, var[x], 1);
- sprintf(teste, "%s%c", teste, tabela2[--posicao]);
- } else {
- posicao = PosicaoCaracter(tabela2, var[x], 1);
- sprintf(teste, "%s%c", teste, tabela1[--posicao]);
- }
- }
- return teste;
- }
-
- char *TrimSur(char *var, int opcao)
- {
- /*
- Este comando retira espacos dos cantos de uma string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> " Cristian Robert Gallas " (CHAR 256)
- Opcao --> 0 (INT)
- Obs : 0 Retira da esquerda e direita
- 1 da direita
- 2 da esquerda
- Saida : String --> "Cristian Robert Gallas" (CHAR 256)
- Obs : as aspas sao somente para demonstrar o efeito.
- TrimSur(" Cristian Robert Gallas ", 0);
- */
-
- int x = 0;
- if(opcao < 0 && opcao > 2)
- opcao = 0;
- if(opcao == 1 || opcao == 0)
- {
- for(x = 0; x < strlen(var); x++)
- if(var[x] != ' ')
- break;
- strcpy(var, Copia(var, ++x, -1));
- }
- if(opcao == 2 || opcao == 0)
- {
- for(x = (strlen(var) - 1); x > 1; x--)
- if(var[x] != ' ')
- break;
- strcpy(var, Copia(var, 1, ++x));
- }
- return var;
- }
-
- char *DiaSemana(char var[20], int opcao)
- {
- /*
- Este comando recebe uma data e retorna o dia da semana.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Data --> 01.02.1997 (CHAR 20)
- Opcao --> 0 (INT)
- Obs : 0 retorna em portugues
- 1 ingles
- 2 o numero do dia, inicio em 1 -> domingo.
- Saida : Dia da Semana -> Segunda (CHAR RETURN)
- DiaSemana("01.02.1997", 0);
- */
-
- char teste[256];
- int x = 0;
- x = fmod(atof(Arredondar(DiaJuliano(var))), 7.0);
- if(opcao == 2)
- {
- sprintf(teste, "%d", x);
- return teste;
- }
- switch(x)
- {
- case 1: if(opcao == 0) return "Domingo"; else return "Sunday";
- case 2: if(opcao == 0) return "Segunda"; else return "Monday";
- case 3: if(opcao == 0) return "Terca"; else return "Tuesday";
- case 4: if(opcao == 0) return "Quarta"; else return "Wednesday";
- case 5: if(opcao == 0) return "Quinta"; else return "Thursday";
- case 6: if(opcao == 0) return "Sexta"; else return "Friday";
- case 0: if(opcao == 0) return "Sabado"; else return "Saturday";
- }
- return "ERRO";
- }
-
- char *EspacoString(char var[256], int tamanho, int opcao)
- {
- /*
- Este comando acrescenta espacos na frente ou atras de uma string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> "Cristian" (CHAR 256)
- Tamanho do campo --> 20 (INT)
- Opcao --> 0 (INT)
- Obs : 0 - Esquerda
- 1 - Direita
- Saida : String com espacos --> " Cristian" (CHAR 256)
- Obs : As aspas sao so para demonstrar o resultado.
- Caso o tamanho especificado do campo final for menor que o
- tamanho da string, o resultado sera cortado.
- EspacoString("Cristian", 20, 0);
- */
-
- char saida[256], teste[256];
- int x, y;
- x = strlen(var);
- y = tamanho - x;
- if(y <= 0)
- return Copia(var, 1, tamanho);
- for(x = 0; x < y; x++)
- teste[x] = ' ';
- teste[x] = '\0';
- if(opcao == 0)
- sprintf(saida, "%s%s", teste, var);
- else
- sprintf(saida, "%s%s", var, teste);
- return saida;
- }
-
- char *UltimaLinha(char var[256])
- {
- /*
- Este comando pega a ultima linha de um arquivo. Rotina super
- rapida, usa posicionamento de arquivo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:gallas.txt (CHAR 256)
- Saida : Ultima linha --> Last Line (CHAR 256)
- Erro : "ERRO" (CHAR RETURN)
- UltimaLinha("dh2:gallas.txt");
- */
-
- char a, teste[256];
- int x = 0, y = 0;
- FILE *entrada;
- if(!(entrada = fopen(var, "r")))
- return "ERRO";
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- y++; teste[--x] = '\0';
- if(y > 1)
- break;
- }
- }
- if(y == 1)
- {
- fclose(entrada);
- return teste;
- }
- fseek(entrada, 0, SEEK_END);
- while(a = getc(entrada), a != '\n' && a != '\0')
- fseek(entrada, -2, 1);
- x = 0; teste[0] = '\0';
- while(a = getc(entrada), ! feof(entrada))
- teste[x++] = a;
- teste[--x] = '\0';
- fclose(entrada);
- return teste;
- }
-
- char *UpperCase(char var[256])
- {
- /*
- Este comando converte uma string para todos os caracteres em
- maiusculo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String a converter --> Cristian Gallas (CHAR 256)
- Saida : String maiuscula --> CRISTIAN GALLAS (CHAR 256)
- UpperCase("Cristian Gallas");
- */
-
- char teste[256];
- int x = 0, y = 0;
- for(x = 0; x < strlen(var); x++)
- teste[y++] = toupper(var[x]);
- teste[y] = '\0';
- return teste;
- }
-
- char *LowerCase(char var[256])
- {
- /*
- Este comando converte uma string para todos os caracteres em
- minusculo.
-
- Versao : 1.0
- Entrada : String a converter --> CRISTIAN GALLAS (CHAR 256)
- Saida : String maiuscula --> cristian gallas (CHAR 256)
- LowerCase("CRISTIAN GALLAS");
- */
-
- char teste[256];
- int x = 0, y = 0;
- for(x = 0; x < strlen(var); x++)
- teste[y++] = tolower(var[x]);
- teste[y] = '\0';
- return teste;
- }
-
- char *PrimeiroUpper(char var[256])
- {
- /*
- Este comando converto todos os primeiros caracteres das palavras
- de uma determinada frase ou string para maiusculo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String a converter --> cristian gallas (CHAR 256)
- Saida : String convertida --> Cristian Gallas (CHAR 256)
- PrimeiroUpper("cristian gallas");
- */
-
- char teste[256];
- int x = 0, y = 0, ativa = 0;
- for(x = 0; x < strlen(var); x++)
- {
- if(x == 0 || var[x - 1] == ' ')
- ativa = 1;
- if(ativa == 0)
- teste[y++] = tolower(var[x]);
- else
- {
- ativa = 0;
- teste[y++] = toupper(var[x]);
- }
- }
- teste[y] = '\0';
- return teste;
- }
-
- char *StringParaCgc(char var[30])
- {
- /*
- Este comando recebe um numero de 14 algarismos e retorna formatado
- no formato padrao de CGC.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Numero --> 12345678901234 (CHAR 30)
- Saida : Cgc --> 12.345.678/9012-34 (CHAR 30)
- Erro : ERRO (CHAR RETURN) Quando passado diferente de 14 algarismos
- StringParaCgc("12345678901234");
- */
-
- char x1[6], x2[6], x3[6], x4[6], x5[6], teste[256];
- if(strlen(var) != 14)
- return "ERRO";
- strcpy(x1, Copia2(var, 1, 2));
- strcpy(x2, Copia2(var, 3, 3));
- strcpy(x3, Copia2(var, 6, 3));
- strcpy(x4, Copia2(var, 9, 4));
- strcpy(x5, Copia2(var, 13, 2));
- sprintf(teste, "%s.%s.%s/%s-%s", x1, x2, x3, x4, x5);
- return teste;
- }
-
- int ExisteDiretorio(char var[256])
- {
- /*
- Rotina que testa se um diretorio existe.
-
- Versao : 1.0
- Compila : AmigaDos
- Entrada : Path --> dh2:tmp/ (CHAR 256)
- Saida : True (-1) se existir e False (0) se nao existir (INT)
- if(ExisteDiretorio("dh2:tmp/"))
- */
-
- DIR *dfd;
-
- if(!(dfd = opendir(var))) {
- closedir(dfd);
- return 0;
- } else {
- closedir(dfd);
- return -1; }
- }
-
- int FinalArquivo(char var[256], char var2[256], int numero)
- {
- /*
- Este comando pega determinadas linhas do final do arquivo
- e gera outro arquivo com seu conteudo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo Entrada --> dh2:gallas.txt (CHAR 256)
- Path+Nome Arquivo Saida --> dh2:saida.txt (CHAR 256)
- Numero de linhas --> 10
- Saida : Sera pego as ultimas 10 linhas do arquivo de entrada
- e gravado no arquivo de saida.
- Retorna [-1] se sucesso e [0] se erro.
- FinalArquivo("dh2:gallas.txt", "dh2:saida.txt", 10);
- */
-
- char a, teste[256];
- int x = 0, total = 0;
- FILE *entrada, *saida;
- total = LinhasArquivo(var);
- if(total <= numero)
- {
- CopiaArquivo(var, var2);
- return -1;
- }
- if(!(entrada = fopen(var, "r")))
- return 0;
- if(!(saida = fopen(var2, "w")))
- return 0;
- /* Posiciona e pega as linhas requisitadas do final */
- fseek(entrada, 0, SEEK_END);
- while(a = getc(entrada), x < numero) {
- if(a == '\n')
- x++;
- fseek(entrada, -2, 1); }
- x = 0; teste[0] = '\0'; getc(entrada);
- while(a = getc(entrada), ! feof(entrada))
- fprintf(saida, "%c", a);
- fclose(entrada);
- fclose(saida);
- return -1;
- }
-
- char *FiltraCaracter(char var[256], int opcao)
- {
- /*
- Este comando filtra uma string seguindo as seguintes opcoes.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String a filtrar --> 051-632-28-05
- Opcao --> 0
- Obs: : Opcoes de tipo de filtro
- 0 -> Filtra e retorna somente numeros
- 1 -> Filtra e retorna somente letras
- 2 -> Filtra e retorna somente letras e numeros
- Saida : String Filtrada --> 0516322805
- FiltraCaracter("051-632-28-05", 0);
- */
-
- char teste[256];
- int x = 0, y = 0;
- if(opcao < 0 || opcao > 2)
- opcao = 2;
- for(x = 0; x < strlen(var); x++)
- {
- if(opcao == 0)
- if(isdigit(var[x]))
- teste[y++] = var[x];
- if(opcao == 1)
- if(isalpha(var[x]))
- teste[y++] = var[x];
- if(opcao == 2)
- if(isalnum(var[x]))
- teste[y++] = var[x];
- }
- teste[y] = '\0';
- return teste;
- }
-
- char *InsereString(char var[256], char var2[256], int numero)
- {
- /*
- Esta rotina acrescenta uma string dentro de outra, adicionando
- na posicao passada como parametro.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String Inicial --> CristianGallas (CHAR 256)
- String a Adicionar --> Robert (CHAR 256)
- Posicao a Adicionar --> 9 (INT)
- Saida : Juncao das duas --> CristianRobertGallas (CHAR 256)
- InsereString("CristianGallas", "Robert", 9);
- Obs : O caracter inicia em 1!
- */
-
- char parte1[256], parte2[256], teste[256];
- numero--;
- strcpy(parte1, Copia(var, 1, numero));
- strcpy(parte2, Copia(var, numero+1, -1));
- sprintf(teste, "%s%s%s", parte1, var2, parte2);
- return teste;
- }
-
- char *Online(char dat[256], char hora[256], char tempo[256])
- {
- /*
- Esta rotina retorna os dados referentes a uma coneccao
- calculando a hora de desconeccao e o dia.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Dia da coneccao --> 01.01.1997 (CHAR 256)
- Hora da coneccao --> 23:10:10 (CHAR 256)
- Tempo online --> 01:20:02 (CHAR 256)
- Saida : A saida sao 5 campos separados pelo caracter @
- Ex: 729398@729398@8341@1812@4802@10153
- Campo 1 --> Data de coneccao (Juliano)
- Campo 2 --> Data de desconeccao (Juliano)
- Campo 3 --> Hora de coneccao (Segundos)
- Campo 4 --> Hora de desconeccao (Segundos)
- Campo 5 --> Tempo de coneccao (Segundos)
- Campo 6 --> Hora Direta +24 (Segundos)
- Online("01.01.1997", "23:10:10", "01:20:02");
- */
-
- char teste[256];
- float dia1, dia2;
- int hora1, hora2, tempoon, horadireta;
- dia1 = atof(DiaJuliano(dat));
- hora1 = atoi(HoraSegundo(hora));
- hora2 = hora1 + atoi(HoraSegundo(tempo));
- tempoon = atoi(HoraSegundo(tempo));
- sprintf(teste, "%d", hora2);
- strcpy(teste, Corta(SegundoHora(teste), ':', 0));
- dia2 = dia1 + (atoi(teste) / 24);
- horadireta = hora2;
- if(atoi(teste) > 23)
- hora2 = hora2 - 86400;
- sprintf(teste, "%f@%f@%d@%d@%d@%d", dia1, dia2, hora1, hora2, tempoon, horadireta);
- return teste;
- }
-
- int GravaLinha(char var[256], char linha[256], char comando[10])
- {
- /*
- Este comando adiciona uma linha em um determinado arquivo.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo --> dh2:gallas.txt
- A Linha a adicionar --> Gallas
- O tipo de comando --> a, w
- Saida : Caso de erro retornado -1 se ok, retorna 0.
- Obs : a Adiciona no arquivo, w inicializa arquivo com a linha.
- GravaLinha("dh2:gallas.txt", "Gallas", "a");
- */
-
- FILE *saida;
- if(!(saida = fopen(var, comando)))
- return -1;
- fprintf(saida, "%s", linha);
- fclose(saida);
- return 0;
- }
-
- int InsereArquivo(char var1[256], char var2[256])
- {
- /*
- Este comando insere um arquivo em outro.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome arquivo origem --> dh2:gallas.txt (CHAR 256)
- Path+Nome arquivo destino --> dh2:gallas.tmp (CHAR 256)
- Saida : -1 Erro abertura na origem ou criacao destino, 0 OK (INT)
- InsereArquivo("dh2:gallas.txt", "dh2:gallas.tmp");
- */
-
- char a;
- FILE *entrada, *saida;
- if(!(entrada = fopen(var1, "r")))
- return -1;
- if(!(saida = fopen(var2, "a")))
- return -1;
- while(a = getc(entrada), ! feof(entrada))
- fputc(a, saida);
- fclose(entrada);
- fclose(saida);
- return 0;
- }
-
- char *JulianoDia(char var[256])
- {
- /* Esta rotina converte dia juliano para data.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Dia Juliano --> 729040 (CHAR 256)
- Saida : Data Correspondente --> 01.01.1997 (CHAR 256)
- JulianoDia("729040");
- */
-
- char teste[256];
- float pdatajul = 0, x = 0;
- int y = 0, ano = 0, mes = 1, dia = 0;
- pdatajul = atof(var);
- ano = (((pdatajul - 1) - ((pdatajul - 1) / 1461)) / 365) + 1;
- x = ano;
- y = fmod(x, 4.0);
- if(y != 0)
- {
- y = (pdatajul - 1) / 1461;
- x = ((pdatajul - 1) - y);
- dia = fmod(x, 365.0) + 1;
- if((dia > 31) && (dia <= 59))
- {
- mes = 2;
- dia = dia - 31;
- }
- if((dia > 59) && (dia <= 90))
- {
- mes = 3;
- dia = dia - 59;
- }
- if((dia > 90) && (dia <= 120))
- {
- mes = 4;
- dia = dia - 90;
- }
- if((dia > 120) && (dia <= 151))
- {
- mes = 5;
- dia = dia - 120;
- }
- if((dia > 151) && (dia <= 181))
- {
- mes = 6;
- dia = dia - 151;
- }
- if((dia > 181) && (dia <= 212))
- {
- mes = 7;
- dia = dia - 181;
- }
- if((dia > 212) && (dia <= 243))
- {
- mes = 8;
- dia = dia - 212;
- }
- if((dia > 243) && (dia <= 273))
- {
- mes = 9;
- dia = dia - 243;
- }
- if((dia > 273) && (dia <= 304))
- {
- mes = 10;
- dia = dia - 273;
- }
- if((dia > 304) && (dia <= 334))
- {
- mes = 11;
- dia = dia - 304;
- }
- if(dia > 334)
- {
- mes = 12;
- dia = dia - 334;
- }
- }
- else
- {
- y = fmod(pdatajul, 1461.0);
- if(y != 0)
- {
- y = (pdatajul - 1) / 1461;
- x = pdatajul - 1;
- dia = (fmod((x - y), 365.0)) + 1;
- }
- else
- dia = 366;
-
- if((dia > 31) && (dia <= 60))
- {
- mes = 2;
- dia = dia - 31;
- }
- if((dia > 60) && (dia <= 91))
- {
- mes = 3;
- dia = dia - 60;
- }
- if((dia > 91) && (dia <= 121))
- {
- mes = 4;
- dia = dia - 91;
- }
- if((dia > 121) && (dia <= 152))
- {
- mes = 5;
- dia = dia - 121;
- }
- if((dia > 152) && (dia <= 182))
- {
- mes = 6;
- dia = dia - 152;
- }
- if((dia > 182) && (dia <= 213))
- {
- mes = 7;
- dia = dia - 182;
- }
- if((dia > 213) && (dia <= 244))
- {
- mes = 8;
- dia = dia - 213;
- }
- if((dia > 244) && (dia <= 274))
- {
- mes = 9;
- dia = dia - 244;
- }
- if((dia > 274) && (dia <= 305))
- {
- mes = 10;
- dia = dia - 274;
- }
- if((dia > 305) && (dia <= 335))
- {
- mes = 11;
- dia = dia - 305;
- }
- if(dia > 335)
- {
- mes = 12;
- dia = dia - 335;
- }
- }
- sprintf(teste, "%d.%d.%d", dia, mes, ano);
- strcpy(teste, ArrumaDataHora(teste, '.'));
- return teste;
- }
-
- char *SomaDiminuiMes(char data[256], int nmes)
- {
- /*
- Esta rotina soma ou diminui um mes a uma determinada data,
- testando e arrumando o ano, caso necessario.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Ex1:
- Entrada : Data --> 10.01.1997 (CHAR 256)
- Meses a calcular --> 2 (INT)
- Saida : Data com a soma de 2 meses --> 10.03.1997 (CHAR 256)
- Ex2:
- Entrada : Data --> 10.01.1997 (CHAR 256)
- Meses a calcular --> -2 (INT)
- Saida : Data com a soma de 2 meses --> 10.11.1996 (CHAR 256)
- Obs : Essa rotina nao testa o dia.
- SomaDiminuiMes("10.01.1997", 2);
- SomaDiminuiMes("10.01.1997", -2);
- */
-
- char teste[256];
- int x, dia, mes, ano;
- dia = atoi(Corta(data, '.', 0));
- mes = atoi(Corta(data, '.', 1));
- ano = atoi(Corta(data, '.', 2));
- if(nmes > 0)
- {
- for(x = 0; x < nmes; x++) {
- mes++;
- if(mes == 13) {
- mes = 1;
- ano++; } }
- }
- else
- {
- for(x = 0; x < (nmes * -1); x++) {
- mes--;
- if(mes == 0) {
- mes = 12;
- ano--; } }
- }
- sprintf(teste, "%d.%d.%d", dia, mes, ano);
- strcpy(teste, ArrumaDataHora(teste, '.'));
- return teste;
- }
-
- char *IntervaloPeriodo(char periodo1[30], char periodo2[30], char periodo3[30], char periodo4[30], int xdias)
- {
- /*
- Este comando verifica o periodo valido de um determinado periodo
- de tempo em relacao a outro.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Periodo 1 (Fixo) --> 01:00:00 (CHAR 30)
- Periodo 2 (Fixo) --> 05:00:00 (CHAR 30)
- Periodo 3 --> 03:00:00 (CHAR 30)
- Periodo 4 --> 06:00:00 (CHAR 30)
- Dias intermediarios --> 1 (INT)
- Obs : O pediodo 1 e 2 sao fixos, no caso nao contabilizam
- no horario de saida.
- Saida : Periodo real usado --> 01:00:00 (CHAR 30)
- IntervaloPeriodo("01:00:00", "05:00:00", "03:00:00", "06:00:00", 1);
- */
-
- char teste[256];
- int r = 0, h1 = 0, h2 = 0, x1 = 0, x2 = 0, horas = 0;
-
- h1 = atoi(HoraSegundo(periodo1));
- h2 = atoi(HoraSegundo(periodo2));
- x1 = atoi(HoraSegundo(periodo3));
- x2 = atoi(HoraSegundo(periodo4));
-
- if(xdias == 0)
- xdias = 1;
- if((x2 < x1) || (h2 < h1))
- {
- x2 = x2 + (xdias * 86400);
- if((h1 < h2) && (h1 > 0))
- h1 = h1 + (xdias * 86400);
- h2 = h2 + (xdias * 86400);
- }
-
- horas = x2 - x1;
- if((x1 < h1) && (x2 > h2))
- horas = (h1 - x1) + (x2 - h2);
- else
- {
- if((x1 >= h1) && (x1 <= h2)) {
- if((x2 >= h1) && (x2 <= h2)) {
- r = x2 - x1;
- } else {
- r = h2 - x1; }
- } else
- if((x2 >= h1) && (x2 <= h2)) {
- r = x2 - h1;
- } else {
- r = 0; }
- horas = horas - r;
- }
- sprintf(teste, "%d", horas);
- return ArrumaDataHora(SegundoHora(teste), ':');
- }
-
- char *AlteraCampo(char var[256], char var2[256], char delimitador, int campo)
- {
- /*
- Esta funcao altera um determinado campo dentro de uma string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String com os campos--> Cristian,Rbr,Gallas (CHAR 256)
- Campo novo --> Robert (CHAR 256)
- Delimitador campos --> , (CHAR 1)
- Campo (inicia em 0) --> 1 (INT)
- Saida : Linha alterada --> Cristian,Robert,Gallas (CHAR 256)
- AlteraCampo("Cristian,Rbr,Gallas", "Robert", ',', 1);
- */
-
- char teste[256], parte1[256], parte2[256];
- int posicao1 = 0, posicao2 = 0;
- if(campo == 0)
- posicao1 = 0;
- else
- posicao1 = PosicaoCaracter(var, delimitador, campo);
- posicao2 = PosicaoCaracter(var, delimitador, campo+1);
- strcpy(parte1, Copia(var, 1, posicao1));
- strcpy(parte2, Copia(var, posicao2, -1));
- sprintf(teste, "%s%s%s", parte1, var2, parte2);
- return teste;
- }
-
- int DiretorioArquivo(char var[256], char arquivo[256], int opcao)
- {
- /*
- Este comando lista o conteudo de um determinado diretorio
- e gera um arquivo com o conteudo em si.
-
- Versao : 1.0
- Compila : AmigaDos
- Entrada : Path a listar --> dh0:c/ (CHAR 256)
- Arquivo Saida --> ram:saida.tmp (CHAR 256)
- Opcao --> 1 (INT)
- * Opcao 0, grava sem path absoluta, 1 grava com path.
- Saida : Sera gerado o arquivo com o conteudo do diretorio,
- retorna um INT, -1 tudo ok, e 0 deu erro. (INT)
- DiretorioArquivo("dh0:c/", "ram:saida.tmp", 1);
- */
-
- char teste[256];
- DIR *dfd;
- FILE *saida;
- struct dirent *dptr;
- if(strcmp(Copia2(var, strlen(var), 1), ":") &&
- strcmp(Copia2(var, strlen(var), 1), "/"))
- sprintf(teste, "%s/", var);
- else
- strcpy(teste, var);
- if(!ExisteDiretorio(teste))
- return 0;
- if(!(saida = fopen(arquivo, "w")))
- return 0;
- dfd = opendir(teste);
- while ((dptr = readdir(dfd)) != NULL)
- if(opcao == 0)
- fprintf(saida, "%s\n", dptr->d_name);
- else
- fprintf(saida, "%s%s\n", teste, dptr->d_name);
- closedir(dfd);
- fclose(saida);
- return -1;
- }
-
- int TestaData(char var[256])
- {
- /*
- Esta rotina testa a validade de um determinado formato de
- data.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Data [DD.MM.AAAA] --> 01.01.1997 (CHAR 256)
- Saida : 0 se data invalida e -1 se data certa. (INT)
- Obs : O separador de data deve ser sempre o [.]
- Os testes de validade consistem em:
- Dia >= 1 e Dia <=31, Mes >= 1 e Mes <= 12,
- Ano >= 1900, Tamanho do formato da data = 10
- if(TestaData("01.01.1997"))
- */
-
- int dia = 0, mes = 0, ano = 0;
- dia = atoi(Corta(var, '.', 0));
- mes = atoi(Corta(var, '.', 1));
- ano = atoi(Corta(var, '.', 2));
- if(((dia < 1) || (dia > 31)) ||
- ((mes < 1) || (mes > 12)) ||
- (ano < 1900) ||
- (strlen(var) != 10))
- return 0;
- return -1;
- }
-
- int TestaHora(char var[256])
- {
- /*
- Este comando testa se um determinado horario eh valido.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Hora completa [HH:MM:SS] --> 23:59:59 (CHAR 259)
- Saida : 0 se a hora eh invalida e -1 se a hora eh certa. (INT)
- Obs : O separador deve ser sempre o [:]
- Os testes de validade consistem sempre em:
- Hora > 0 e Hora < 24, Minutos > 0 e Minutos < 60,
- Segundos > 0 e Segundos < 60,
- Formado da Hora = 8
- if(TestaHora("23:59:59"))
- */
-
- int hh = 0, mm = 0, ss = 0;
- hh = atoi(Corta(var, ':', 0));
- mm = atoi(Corta(var, ':', 1));
- ss = atoi(Corta(var, ':', 2));
- if(((hh < 0) || (hh > 23)) ||
- ((mm < 0) || (mm > 59)) ||
- ((ss < 0) || (ss > 59)) ||
- (strlen(var) != 8))
- return 0;
- return -1;
- }
-
- int UnirArquivos(char saida[256], char lista[256])
- {
- /*
- Este comando uni arquivos apartir de uma lista.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo Saida --> gallas.txt (CHAR 256)
- Path+Nome Arquivo Lista --> lista.txt (CHAR 256)
- Saida : Sera gerado o arquivo de saida contendo todos os
- arquivos incluidos na lista. O comando retorna
- 0 se ocorrer erro e -1 se sucesso. (INT)
- Obs : A lista eh um arquivo texto, ex:
- Arquivo1.txt
- Arquivo2.txt
- Arquivo3.txt
- UnirArquivos("gallas.txt", "lista.txt");
- */
-
- char a, teste[256];
- int x = 0;
- FILE *entrada;
- if(!(entrada = fopen(lista, "r")))
- return 0;
- x = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- InsereArquivo(teste, saida);
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- return -1;
- }
-
- char *UltimoCaracter(char var[256])
- {
- /*
- Este comando retorna o ultimo caracter de uma string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> Cristian (CHAR 256)
- Saida : Ultimo --> n (CHAR 256)
- UltimoCaracter("Cristian");
- */
-
- char teste[256];
- strcpy(teste, Copia2(var, strlen(var), 1));
- return teste;
- }
-
- char *FiltraDir(char var[256], int opcao)
- {
- /*
- Este comando filtra um diretorio.
-
- Versao : 1.0
- Entrada : Diretorio --> tmp:gallas (CHAR 256)
- Opcao --> 1 (INT)
- * Opcao 0 sem barra no final, 1 com barra no final.
- Obs : Device eh retornado igual, ex: work:
- Saida : Diretorio Filtrado --> tmp:gallas/ (CHAR 256)
- FiltraDir("tmp:gallas", 1);
- */
-
- char teste[256];
- strcpy(teste, UltimoCaracter(var));
- if(!strcmp(teste, ":"))
- return var;
- if(!strcmp(teste, "/") && opcao == 0)
- return Copia(var, 1, (strlen(var) - 1));
- if(strcmp(teste, "/") && opcao == 1)
- {
- sprintf(teste, "%s/", var);
- return teste;
- }
- return var;
- }
-
- int DeletaArquivos(char lista[256])
- {
- /*
- Este comando deleta arquivos apartir de uma lista.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Path+Nome Arquivo Lista --> lista.txt (CHAR 256)
- Saida : Sera deletado todos os arquivos contidos na lista,
- 0 se ocorrer erro e -1 se sucesso. (INT)
- Obs : A lista eh um arquivo texto, ex:
- Arquivo1.txt
- Arquivo2.txt
- Arquivo3.txt
- DeletaArquivos("lista.txt");
- */
-
- char a, teste[256];
- int x = 0;
- FILE *entrada;
- if(!(entrada = fopen(lista, "r")))
- return 0;
- x = 0;
- while(a = getc(entrada), ! feof(entrada))
- {
- teste[x++] = a;
- if(a == '\n')
- {
- teste[--x] = '\0';
- remove(teste);
- teste[0] = '\0'; x = 0;
- }
- }
- fclose(entrada);
- return -1;
- }
-
- char *CasasAposCaracter(char var[256], char caracter, int casas)
- {
- /*
- Este comando recorta a string determinadas casas apos um
- caracter, partindo do inicio, bom para cortar valores,
- determinando numero de casas apos a virgula.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : String --> 123,3456 (CHAR 256)
- Caracter --> , (CHAR 1)
- Numero apos --> 2
- Saida : String com duas casas apos virgula --> 123,34 (CHAR 256)
- CasasAposCaracter("123,3456", ',', 2);
- */
-
- char teste[256];
- int x = 0;
- x = PosicaoCaracter(var, caracter, 1);
- x = x + casas;
- strcpy(teste, Copia(var, 1, x));
- return teste;
- }
-
- char *ExaminaArquivo(char arq[256], int opcao)
- {
- /*
- Este comando retira informacoes sobre um determinado arquivo.
-
- Versao : 1.0
- Compila : AmigaDos
- Entrada : Path+Nome Arquivo --> dh2:texto.txt (CHAR 256)
- Opcao --> 0 (INT)
- Obs : 0 --> Tamanho em bytes do arquivo
- 1 --> DiskKey
- 2 --> Se eh arquivo ou diretorio, < 0 arquivo, > 0 diretorio
- 3 --> Nome do arquivo
- 4 --> Protecao do arquivo
- 5 --> Numero de blocos do arquivo
- 6 --> Comentario do arquivo
- Saida : Qtd de caracteres --> 2434 (INT)
- ExaminaArquivo("dh2:texto.txt", 0);
- */
-
- char teste[256];
- BPTR lock;
- struct FileInfoBlock __aligned fib;
- if(!(lock = Lock(arq, SHARED_LOCK)))
- return 0;
- if(!Examine(lock, &fib)) {
- UnLock(lock);
- return 0; }
- UnLock(lock);
- switch(opcao)
- {
- case 0: sprintf(teste, "%d", fib.fib_Size); break;
- case 1: sprintf(teste, "%d", fib.fib_DiskKey); break;
- case 2: sprintf(teste, "%d", fib.fib_DirEntryType); break;
- case 3: sprintf(teste, "%s", fib.fib_FileName); break;
- case 4: sprintf(teste, "%d", fib.fib_Protection); break;
- case 5: sprintf(teste, "%d", fib.fib_NumBlocks); break;
- case 6: sprintf(teste, "%s", fib.fib_Comment); break;
- }
- return teste;
- }
-
- int Conectado(void)
- {
- /*
- Comando para testar se o micro esta usando a library que
- conecta a web.
-
- Versao : 1.0
- Compila : AmigaDos
- Entrada : Sem necessidade
- Saida : 0 se conectado, e -1 se nao conectado.
- x = Conectado();
- */
-
- struct Library *SocketBase;
- if(!(SocketBase = OpenLibrary("socket.library", 0)))
- return 0;
- CloseLibrary(SocketBase);
- return -1;
- }
-
- int ContaStrings(char *frase, char *string)
- {
- /*
- Este comando conta quantas vezes uma determinada string
- esta presente em uma outra string.
-
- Entrada : Frase --> Cristian Robert Gallas (CHAR*)
- String a procurar --> "is" (CHAR*)
- Saida : Numero de ocorrencias --> 1 (INT)
- x = ContaStrings("Cristian Robert Gallas", "is");
- */
-
- char *tmp;
- int x = 0;
-
- tmp = malloc(strlen(frase));
- strcpy(tmp, frase);
-
- if(!strcmp(tmp, "") || !strcmp(string, ""))
- return 0;
-
- while(strstr(tmp, string))
- {
- x++;
- strcpy(tmp, strstr(tmp, string));
- strcpy(tmp, Copia(tmp, (strlen(string) + 1), -1));
- }
- free(tmp);
- return x;
- }
-
- char *SubstituiString(char *frase, char *str1, char *str2)
- {
- /* Comando para substituir strings dentro de outra string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Texto principal --> "CristianGallas" (CHAR*)
- String a substituir --> "tian" (CHAR*)
- String nova --> "XX" (CHAR*)
- Saida : String principal alterada
- "CrisXXGallas" (CHAR*)
- SubstituiString("CristianGallas", "tian", "XX");
- */
-
- char *saida, *parte1, *parte2, *tmp;
- int x = 0, frasefinal = 0;
-
- if(!strcmp(frase, "") || !strcmp(str1, ""))
- return frase;
-
- /* CALCULA O TAMANHO FINAL DA STRING PARA ALOCAR MEMORIA */
- x = ContaStrings(frase, str1);
- frasefinal = (strlen(frase) - (strlen(str1) * x) + (strlen(str2) * x));
- frasefinal = frasefinal * 2;
-
- saida = malloc(frasefinal);
- parte1 = malloc(frasefinal);
- parte2 = malloc(frasefinal);
- tmp = malloc(frasefinal);
-
- strcpy(tmp, frase);
- strcpy(saida, frase);
- while(strstr(saida, str1))
- {
- strcpy(tmp, strstr(saida, str1));
- strcpy(parte1, Copia(saida, 1, (strlen(saida) - strlen(tmp))));
- strcpy(parte2, Copia(tmp, (strlen(str1) + 1), -1));
- sprintf(tmp, "%s%s%s", parte1, str2, parte2);
- strcpy(saida, tmp);
- }
- strcpy(saida, tmp);
- free(parte1); free(parte2); free(tmp);
- return saida;
- }
-
- char *CortaStringArquivo(char *arq, char *str1, char *str2, int vezes)
- {
- /*
- Comando abre um arquivo txt e corta determinado texto de dentro
- dele, delimitando inicio e fim do corte, inicio da string a achar
- e cortar ate o inicio da outra string.
-
- Versao : 1.0
- Compila : AmigaDos, HP-UX, IBM AIX, Windows 95, Dos, Windows NT
- Entrada : Arquivo Texto --> "ram:crg.txt" (CHAR*)
- String inicial --> "Cristian" (CHAR*)
- String final --> "Gallas" (CHAR*)
- Nr string no txt --> 2
- Esse numero permite o pulo de strings iniciais,
- exemplo, pegar determinado txt entre a segunda string
- inicial e a final.
- Saida : Conteudo que existe entre a string inicial e a final
- nao sera pego as strings delimitadoras
- CortaFileString("ram:crg.txt", "Cristian", "Gallas", 2);
- */
-
- char *teste, *tmp, a;
- int x = 0;
- FILE *entrada;
-
- if(!(entrada = fopen(arq, "r")))
- return "ERROR";
-
- teste = malloc(atoi(ExaminaArquivo(arq, 0)) + 1);
- tmp = malloc(atoi(ExaminaArquivo(arq, 0)) + 1);
-
- x = 0;
- while(a = getc(entrada),! feof(entrada))
- teste[x++] = a;
- teste[x] = '\0';
- fclose(entrada);
-
- if(!strstr(teste, str1)) {
- return teste; }
-
- for(x = 0; x < vezes; x++) {
- strcpy(teste, strstr(teste, str1));
- teste[0] = 'X'; }
-
- tmp = strstr(teste, str2);
- *tmp = '\0';
-
- return Copia(teste, strlen(str1) + 1, -1);
- }
-